﻿using Gentings.Saas.Sites;

namespace Gentings.Saas.AspNetCore
{
    /// <summary>
    /// 模型基类。
    /// </summary>
    /// <typeparam name="TSite">网站类型。</typeparam>
    public abstract class ModelBase<TSite> : Gentings.AspNetCore.ModelBase
        where TSite : Site, new()
    {
        private SiteDomain? _siteDomain;
        /// <summary>
        /// 当前网站域名实例。
        /// </summary>
        public SiteDomain SiteDomain => _siteDomain ??= GetRequiredService<SiteDomain>();

        /// <summary>
        /// 当前网站Id。
        /// </summary>
        public int SiteId => SiteDomain.SiteId;

        private TSite? _settings;
        /// <summary>
        /// 网站配置。
        /// </summary>
        public TSite Settings => _settings ??= GetRequiredService<TSite>();

        private ISiteManager<TSite>? _siteManager;
        /// <summary>
        /// 网站管理接口实例。
        /// </summary>
        protected ISiteManager<TSite> SiteManager => _siteManager ??= GetRequiredService<ISiteManager<TSite>>();

        /// <summary>
        /// 获取网站对应的区域。
        /// </summary>
        /// <param name="areaName">区域名称。</param>
        /// <returns>返回网站对于区域提供者。</returns>
        public IAreaProvider? GetProvider(string areaName) => SiteManager.GetProvider(areaName);
    }
}
